#include <REGX52.H>
#include "LCD1602.h"
#include "Pin.h"

// 当前状态
 int CUR_MODE = -1;
// 阈值
unsigned int threshold = 6;


	void KeyCheck(){
	// 起始未按下 用于存储按键状态的变量keybuf 最开始置全1
	static unsigned char keybuf[4] = {0xFF,0xFF,0xFF,0xFF};
	// 设置全局变量Key_Status用来存储Key的状态
	static unsigned char Key_Status[4] = {1,1,1,1};
	int i = 0;
	// 每次将新检测到的Key1状态存储到最低位
	keybuf[0] = (keybuf[0] << 1) | Key1;
	keybuf[1] = (keybuf[1] << 1) | Key2;
	keybuf[2] = (keybuf[2] << 1) | Key3;
	keybuf[3] = (keybuf[3] << 1) | Key4;
	for( i = 0 ; i < 4; i++){
		// 当keybuf为全0时，可得按键被按下
		if(keybuf[i] == 0x00){
			// 检测之前是否为高电平
			if(Key_Status[i]){
				switch(i){
					// 当 Key1 被按下时
					case 0:
						// 设置当前模式为设置模式
						CUR_MODE = SET;
						// 关闭定时器1 ———— 停止计数
						TR1 = 0;
						// 显示对应模块数据
						LCD_ORI_MODE();
					break;	
					// 当 Key2 被按下时
					case 1:
						// 设置当前模式为计数模式
						CUR_MODE = COUNT;
						// 打开定时器1 ———— 开始计数
						TR1 = 1;
						// 显示对应模块数据
						LCD_ORI_MODE();
					break;
					// 当 Key3 被按下时
					case 2:
						// 检测当前模式
						switch(CUR_MODE){
							// 若当前为设置模式
							case SET:
								threshold++;
								LCD_ShowNum(1,14,threshold,3);
						}
					break;
					// 当 Key4 被按下时
					case 3:
						// 检测当前模式
						switch(CUR_MODE){
							// 若当前为设置模式
							case SET:
								threshold--;
								LCD_ShowNum(1,14,threshold,3);
						}
					break;
				}
			}
			// 并将按键引脚状态设置为0
			Key_Status[i] = 0;
		}
		
		// 当keybuf为全1时，可得此时已经松手
		if(keybuf[i] == 0xFF){
			// 则将按键引脚状态设置为1
			Key_Status[i] = 1;
		}
	}
}